<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>

        // 案例1
        // var x = 1;
        // // 调用fn时它会产生一个单独的作用域
        // // { let x; x=2; let y = x}
        // function fn(x,y=x){
        //     console.log(y);
        // }

        // fn(2);//2

        // 案例2
        // let x = 1;
        // // {let y;y=x}//这个作用域不能访问下面的作用域，下面的可以访问这个作用域
        // function fn(y = x){
        //     let x = 2;
        //     console.log(y);
        // }

        // fn()//1

        // 案例3
        // var x = 1;

        // // {let x ; let y = function(){x=2;}}
        // function fn(x,y = function(){x=2;}){
        //     var x = 3;//这里不能用let声明，因为上面fn中的x已经用let声明了
        //     y();//2
        //     console.log(x);//3
        // }
        
        // fn();//3
        // console.log(x);//1


        // 案例4
        // {let x = 3,let y = x}
        function fn(x=3,y=x){
            console.log(x,y);
        }
        fn();//3,3


        var x = 5;

        // 临时性死区
        // {let y = x;let x = 3}
        // 1.let中不会提升变量
        // 2.当有全局和局部时，局部会进行接管
        function fn1(y=x,x=3){
            console.log(x,y);
        }
        fn1();//报错






        

    </script>
</body>
</html>